package com.huitong.common.mybatis.encrypt.encryptor;

import cn.hutool.core.codec.Base64;
import com.huitong.common.mybatis.enums.EncodeType;
import com.huitong.common.mybatis.properties.EncryptCustomProperties;

import java.nio.charset.StandardCharsets;

/**
 * Base64加密算法
 *
 * @author fromdrowning
 * @date 2024/4/12 11:14
 */
public class Base64Encryptor extends EncryptorTemplate {

    /**
     * Base64加密算法
     *
     * @param encryptCustomProperties 敏感字段加密自定义配置
     */
    public Base64Encryptor(EncryptCustomProperties encryptCustomProperties) {
        super(encryptCustomProperties);
    }

    /**
     * 校验加密算法必要的参数配置
     */
    @Override
    public void verifyProperties() {
        // Base64无需校验
    }

    /**
     * 加密
     *
     * @param value      需要加密的敏感字段值
     * @param encodeType 加密后的编码类型
     * @return 加密后的敏感字段值
     */
    @Override
    public String encrypt(String value, EncodeType encodeType) {
        return Base64.encode(value, StandardCharsets.UTF_8);
    }

    /**
     * 解密
     *
     * @param value 需要解密的敏感字段值
     * @return 解密后的敏感字段值
     */
    @Override
    public String decrypt(String value) {
        return Base64.decodeStr(value, StandardCharsets.UTF_8);
    }
}
